// Variables para el manejo de hojas var hojaPrincipal = "Hoja 1"; var hojaUltimosValores = "Últimos Valores"; var hojaDatosUsuarios = "datos usuarios"; var ss = SpreadsheetApp.getActiveSpreadsheet(); var hoja = ss.getSheetByName(hojaPrincipal); var hojaValores = ss.getSheetByName(hojaUltimosValores); var hojaUsuarios = ss.getSheetByName(hojaDatosUsuarios); // Variables obtenidas de funciones por return var e_number; // función para manejar las solicitudes HTTP POST entrantes. Cuando se recibe una solicitud POST, llama a la función handleRepose y le pasa el objeto de solicitud e. function doPost(e){ return handleRepose(e) ; } // Código para crear o obtener una hoja llamada '_Logs' function crearHojaLogs() { // se crea una variable para la hoja de errores, elcódigo comprueba si la hoja ya existe, y si no la inserta. var sheet_log = ss.getSheetByName('_Logs'); if (!sheet_log) { ss.insertSheet('_Logs'); sheet_log = ss.getSheetByName('_Logs'); } // Registramos el número de ejecuciones if (sheet_log.getRange('A1').isBlank()) { sheet_log.getRange('A1').setValue(1); // actualiza el recuento de ejecuciones en la celda A1 de la hoja '_Logs'sumandole 1 } else { sheet_log.getRange('A1').setValue(sheet_log.getRange('A1').getValue() + 1); } // Devuelve el número de ejecución y lo almacena en la variable e_number e_number = sheet_log.getRange('A1').getValue(); return e_number; } function handleRepose(e) { crearHojaLogs(); // Llamamos la función que crea la hoja de logs try { // Verificar si la cabecera ya está creada, si no, la creamos if (hoja.getRange('A1').isBlank()) { var h_row = ["cen", "fecha-hora", "nombre", "Humedad Relativa %", "Temperatura ºC", "NH3"]; hoja.getRange(1, 1, 1, h_row.length).setValues([h_row]); } // Parsear el JSON recibido var jsonData = JSON.parse(e.postData.contents); // Extraer ID del dispositivo var deviceId = jsonData.end_device_ids.device_id; // Variables para los valores de temperatura, humedad y H2S var temperatura = ''; var humedad = ''; var h2s = ''; // Acceder a los mensajes decodificados var messages = jsonData.uplink_message.decoded_payload.messages; // Procesar los mensajes si existen y están bien formados if (messages && Array.isArray(messages)) { messages.forEach(group => { group.forEach(msg => { const id = parseInt(msg.measurementId); const value = msg.measurementValue; if (typeof value === 'number') { const formattedValue = value.toString().replace('.', ','); if (id === 1) h2s = formattedValue; if (id === 2) temperatura = formattedValue; if (id === 3) humedad = formattedValue; } }); }); } // (Opcional) Guardar datos de los mensajes en la hoja de logs para depurar //var sheet_log = ss.getSheetByName('_Logs'); //sheet_log.appendRow([e_number, JSON.stringify(messages)]); // Crear la fila de datos var row = [e_number, new Date(), deviceId, humedad, temperatura, h2s]; // Insertar la fila en la hoja de cálculo hoja.appendRow(row); } catch (err) { // Guardar errores en la hoja de logs var sheet_log = ss.getSheetByName('_Logs'); sheet_log.appendRow([e_number, err.message]); } }